home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / flight / land1.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  6KB  |  275 lines

  1. /*
  2.  * Copyright 1984-1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. /*
  19.  *  flight/land1.c $Revision: 1.27 $
  20.  */
  21.  
  22. #include "flight.h"
  23.  
  24.  
  25. static unsigned short bcursor[] = {
  26.     0xffff, 0xffff, 0xffff, 0xe007,
  27.     0xe007, 0xe007, 0xe007, 0xe007,
  28.     0xe007, 0xe007, 0xe007, 0xe007,
  29.     0xe007, 0xffff, 0xffff, 0xffff,
  30. };
  31.  
  32. static unsigned short nocursor[] = {
  33.     0x0000, 0x0000, 0x0000, 0x0000,
  34.     0x0000, 0x0000, 0x0000, 0x0000,
  35.     0x0000, 0x0000, 0x0000, 0x0000,
  36.     0x0000, 0x0000, 0x0000, 0x0000,
  37. };
  38.  
  39.  
  40. /*
  41.  *  init_graphics() initilizes graphics for flight
  42.  */
  43. init_graphics(name)
  44.     char *name;
  45. {
  46.     static Pattern16 shadow_pattern = {
  47.     0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa,
  48.     0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa,
  49.     };
  50.     static Pattern16 crash_pattern = {
  51.     0x0007, 0x000e, 0x001c, 0x0038, 0x0070, 0x00e0, 0x01c0, 0x0380,
  52.     0x0700, 0x0e00, 0x1c00, 0x3800, 0x7000, 0xe000, 0xc001, 0x8003,
  53.     };
  54.  
  55.     static int firsttime = 1;    /* 0 after first call to init_graphics() */
  56.  
  57.     if (firsttime)
  58.     {
  59.     char gver[32];
  60.  
  61.     if (xmaxscreen == 0)
  62.         xmaxscreen = getgdesc(GD_XPMAX) - 1;
  63.     if (ymaxscreen == 0)
  64.         ymaxscreen = getgdesc(GD_YPMAX) - 1;
  65.     zminscreen = getgdesc(GD_ZMIN);
  66.     zmaxscreen = getgdesc(GD_ZMAX);
  67.  
  68. #if 1
  69.     prefposition(0, xmaxscreen, 0, ymaxscreen);
  70.     noborder();
  71.     foreground();
  72. #else
  73.     keepaspect(5,4);
  74. #endif
  75.     winopen(name);
  76.     color(0);
  77.     clear();
  78.     icontitle(name);
  79.     subpixel(1);
  80.  
  81.     init_window_size();
  82.  
  83.     /*
  84.      *  Decide if we need to run in color index mode.
  85.      */
  86.     gversion(gver);
  87.     if (((getgdesc(GD_BITS_NORM_DBL_RED) < 4 ||
  88.           strncmp(gver, "GL4D-", 5)    == 0 ||
  89.           strncmp(gver, "GL4DPI-", 7)  == 0 ||
  90.           strncmp(gver, "GL4DPI2-", 8) == 0 ||
  91.           strncmp(gver, "GL4DPIT-", 8) == 0 ||
  92.           strncmp(gver, "GL4DLG-", 7)  == 0 ||
  93.           strncmp(gver, "GL4DNP-", 7)  == 0) &&
  94.          (!force_rgb)) ||
  95.         getgdesc(GD_BITS_NORM_ZBUFFER) == 0 ||
  96.         getgdesc(GD_BITS_NORM_DBL_RED) == 0)
  97.         force_cmode = TRUE;
  98.  
  99.     doublebuffer();
  100.     if (force_cmode)
  101.     {
  102.         in_cmode = TRUE;
  103.         bits_cmode = MIN(bits_cmode, getgdesc(GD_BITS_NORM_DBL_CMODE));
  104.         shademodel(FLAT);
  105.     }
  106.     else
  107.         RGBmode();
  108.  
  109. #ifndef NO_MS
  110.     if (getgdesc(GD_MULTISAMPLE) > 0)
  111.         mssize(4, 32, 0);
  112. #endif
  113.     underlay(2);
  114.     overlay(0);
  115.     gconfig();
  116.  
  117.     }
  118.  
  119.     viewport(0, xmaxwindow, 0, ymaxwindow);
  120.     if (in_cmode)
  121.     color(0);
  122.     else
  123.     cpack(0x0);
  124.     clear();
  125.     swapbuffers();
  126.     clear();
  127.  
  128.     if (firsttime)
  129.     {
  130.     swapinterval(2);
  131.  
  132. #ifndef NO_MS
  133.     if (getgdesc(GD_MULTISAMPLE) > 0)
  134.         ms_samples = getgconfig(GC_MS_SAMPLES);
  135.     else
  136.         ms_samples = 0;
  137. #endif
  138.  
  139.     if (getgdesc(GD_BITS_UNDR_SNG_CMODE) >= 2)
  140.         bits_under = 2;
  141.     else
  142.         bits_under = 0;
  143.  
  144.     /*
  145.      *  setup data directories
  146.      */
  147.     strncpy(sounddir, datadir, 108);
  148.     strcat(sounddir, "sound/", 108);
  149.     strncpy(objdir, datadir, 108);
  150.     if (in_cmode)
  151.         strcat(objdir, "ci/", 108);
  152.     else
  153.         strcat(objdir, "rgb/", 108);
  154.  
  155. #ifdef AUDIO
  156.     init_audio();
  157. #endif
  158.     }
  159.  
  160.     glcompat(GLC_OLDPOLYGON, FALSE);
  161.  
  162.     mmode(MVIEWING);
  163.     identify_matrix(identmat);
  164.     loadmatrix(identmat);
  165.  
  166.     if (firsttime)
  167.     {
  168.     init_lighting();
  169.     init_texturing();
  170.     set_fog_density(0);
  171.     set_fog_color(0xff999999);
  172.  
  173.     defcursor(1, bcursor);        /* set up block cursor */
  174.     curorigin(1, 8, 8);
  175.     setcursor(1, 0, 0);
  176.  
  177.     deflinestyle(1, 0x3333);
  178.     defpattern(CRASH_PATTERN, PATTERN_16, crash_pattern);
  179.     defpattern(SHADOW_PATTERN, PATTERN_16, shadow_pattern);
  180.  
  181.     save_map();
  182.     setup_colormaps();
  183.  
  184.     set_ftime(get_real_time());        /* set the time */
  185.  
  186.     init_instruments();
  187.  
  188.     qdevice(REDRAW);
  189.     qdevice(MOUSEX);
  190.     qdevice(MOUSEY);
  191.     qdevice(MOUSE1);
  192.     qdevice(MOUSE2);
  193.     qdevice(MOUSE3);
  194.     qdevice(LEFTARROWKEY);
  195.     qdevice(RIGHTARROWKEY);
  196.     qdevice(UPARROWKEY);
  197.     qdevice(DOWNARROWKEY);
  198.     qdevice(PAD0);
  199.     qdevice(PAD1);
  200.     qdevice(PAD2);
  201.     qdevice(PAD3);
  202.     qdevice(PAD4);
  203.     qdevice(PAD5);
  204.     qdevice(PAD6);
  205.     qdevice(PAD7);
  206.     qdevice(PAD8);
  207.     qdevice(PAD9);
  208.     qdevice(KEYBD);
  209.     qdevice(F1KEY);
  210.     qdevice(F2KEY);
  211.  
  212.     qdevice(SBTX);
  213.     qdevice(SBTZ);
  214.     qdevice(SBPICK);
  215.     qdevice(SBBUT2);
  216.     qdevice(SBBUT3);
  217.     qdevice(SBBUT6);
  218.     qdevice(SBBUT7);
  219.     qdevice(SBBUT8);
  220.  
  221.     if (infile)
  222.     {
  223.         qdevice(F9KEY);
  224.         qdevice(F10KEY);
  225.         qdevice(F11KEY);
  226.         qdevice(F12KEY);
  227.         qdevice(PAUSEKEY);
  228.         qdevice(HOMEKEY);
  229.     }
  230.  
  231.     setvaluator(MOUSEX, mousex = xmiddle, 0, xmaxscreen);
  232.     setvaluator(MOUSEY, mousey = ymiddle, 0, ymaxscreen);
  233.     init_exp();
  234.     }
  235.     firsttime = 0;
  236. }
  237.  
  238.  
  239. void init_window_size()
  240. {
  241.     getsize((long *)&xmaxwindow, (long *)&ymaxwindow);
  242.     xmaxwindow -= 1;
  243.     ymaxwindow -= 1;
  244.     getorigin((long *)&xorigin, (long *)&yorigin);
  245.     xmiddle = (xmaxwindow-1) >> 1;
  246.     ymiddle = (ymaxwindow-1) >> 1;
  247.  
  248.     inst_x1 = 0;
  249.     inst_x2 = xmaxwindow;
  250.     inst_y1 = ((int)(66*(ymaxwindow/1023.0)));
  251.     inst_y2 = (ymiddle-2);
  252.  
  253.     report_x1 = 0;
  254.     report_x2 = xmaxwindow;
  255.     report_y1 = 0;
  256.     report_y2 = inst_y1-1;
  257. }
  258.  
  259.  
  260.  
  261. #if 0
  262. char alt_text[8];        /* global altitude text    */
  263. char mach_text[8];        /* global mach number text    */
  264. char g_text[8];            /* global g-force text    */
  265. #endif
  266.  
  267. draw_cross_hairs()
  268. {
  269.     COLOR(C_ORANGE);
  270.     move2s(0, -3);
  271.     draw2s(0, 3);
  272.     move2s(-2, 0);
  273.     draw2s(2, 0);
  274. }
  275.